#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include <unistd.h>
#include <stdlib.h>

#include <string.h>

int main(int argc, char const *argv[])
{
    key_t key = ftok("/", 100); // 获取IPC键
    int msgid = msgget(key, IPC_CREAT|0644); // 获取或创建消息队列
    if(msgid == -1){
        perror("msgget");
        return -1;
    }

    long total = 0;
    int data = 0; // 接收的新数据
    while(1){
        msgrcv(msgid, &data, 4, 0, 0);
        total += data;
        printf("--recv(%d)--\n", data);
        if(data == 0) break;
    }

    // O_TRUNC 写数据之前会清空已存在文件的内容
    int fd = open("a.txt", O_CREAT|O_WRONLY|O_TRUNC, 0644);
    write(fd, &total, sizeof(long));

    close(fd);
    printf("---over---\n");
    return 0;
}
